var itemResponseData;

// 扩展Date的format方法
Date.prototype.format = function(format) {
	var o = {
		"M+" : this.getMonth() + 1,
		"d+" : this.getDate(),
		"h+" : this.getHours(),
		"m+" : this.getMinutes(),
		"s+" : this.getSeconds(),
		"q+" : Math.floor((this.getMonth() + 3) / 3),
		"S" : this.getMilliseconds()
	}
	if (/(y+)/.test(format)) {
		format = format.replace(RegExp.$1, (this.getFullYear() + "")
				.substr(4 - RegExp.$1.length));
	}
	for ( var k in o) {
		if (new RegExp("(" + k + ")").test(format)) {
			format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
					: ("00" + o[k]).substr(("" + o[k]).length));
		}
	}
	return format;
}

/**
 * 转换日期对象为日期字符串
 * 
 * @param date
 *            日期对象
 * @param isFull
 *            是否为完整的日期数据, 为true时, 格式如"2000-03-05 01:05:04" 为false时, 格式如
 *            "2000-03-05"
 * @return 符合要求的日期字符串
 */
function getSmpFormatDate(date, isFull) {
	var pattern = "";
	if (isFull == true || isFull == undefined) {
		pattern = "yyyy-MM-dd hh:mm:ss";
	} else {
		pattern = "yyyy-MM-dd";
	}
	return getFormatDate(date, pattern);
}
/**
 * 转换当前日期对象为日期字符串
 * 
 * @param date
 *            日期对象
 * @param isFull
 *            是否为完整的日期数据, 为true时, 格式如"2000-03-05 01:05:04" 为false时, 格式如
 *            "2000-03-05"
 * @return 符合要求的日期字符串
 */
function getSmpFormatNowDate(isFull) {
	return getSmpFormatDate(new Date(), isFull);
}
/**
 * 转换long值为日期字符串
 * 
 * @param l
 *            long值
 * @param isFull
 *            是否为完整的日期数据, 为true时, 格式如"2000-03-05 01:05:04" 为false时, 格式如
 *            "2000-03-05"
 * @return 符合要求的日期字符串
 */
function getSmpFormatDateByLong(l, isFull) {
	return getSmpFormatDate(new Date(l), isFull);
}
/**
 * 转换long值为日期字符串
 * 
 * @param l
 *            long值
 * @param pattern
 *            格式字符串,例如：yyyy-MM-dd hh:mm:ss
 * @return 符合要求的日期字符串
 */
function getFormatDateByLong(l, pattern) {
	return getFormatDate(new Date(l), pattern);
}
/**
 * 转换日期对象为日期字符串
 * 
 * @param l
 *            long值
 * @param pattern
 *            格式字符串,例如：yyyy-MM-dd hh:mm:ss
 * @return 符合要求的日期字符串
 */
function getFormatDate(date, pattern) {
	if (date == undefined) {
		date = new Date();
	}
	if (pattern == undefined) {
		pattern = "yyyy-MM-dd hh:mm:ss";
	}
	return date.format(pattern);
}

var formSubmit = function(formId) {
	$("#" + formId).submit();
}

var CommonUtils = {
	getUrlParam : function(name) {
		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); // 构造一个含有目标参数的正则表达式对象
		var r = window.location.search.substr(1).match(reg); // 匹配目标参数
		if (r != null)
			return unescape(r[2]);
		return null; // 返回参数值
	}
}
var GridOptions = {
		
	updateItemFromGPGrid : function(queryURL,itemDetailUrl,gridId,formId,updatebtn){
		
		var s = $("#" + gridId).jqGrid('getGridParam','selarrrow');
		
		if(s == null || s == ""){
			layer.tips('您未选中需要修改的记录，请选择！', updatebtn, {
			  tips: [2, '#18a689'],
			  time: 2000
			});
		}else if(s.length != 1){
			
			layer.tips('您选中的记录数大于1，请选择一条记录进行修改！', updatebtn, {
				  tips: [2, '#18a689'],
				  time: 2000
			});
			
		} else{
			GridOptions.loadItemFromGPGrid(s[0], queryURL, itemDetailUrl,gridId,formId);
		}
	},
	deleteItemFromGPGrid : function(deleteUrl,gridId,updatebtn){
		
		var ids = $("#" + gridId).jqGrid('getGridParam','selarrrow');
		
		if(ids == null || ids == ""){
			layer.tips('您未选中需要删除的记录，请选择！', updatebtn, {
			  tips: [2, '#18a689'],
			  time: 2000
			});
		}else{
			
			var confirmId = layer.confirm('<small>您确定要执行此操作吗?</small>', {
				title : '<small>系统提示</small>',
				// skin: 'layui-layer-molv', //样式类名
				closeBtn : 0,
				icon:0,
				offset : '180px',
				// shift: 1, //提示框载入动画
				btn : [ '确定', '取消' ]
			// 按钮
			}, function() {
				layer.load(1, {
					shade : [ 0.2 ]
				// 透明度调整
				});
				
				$.ajax({
					url : deleteUrl,
					dataType : 'json',
					type : 'post',
					data : {
						"ids":ids ,
					},
					success : function(data) {
						if (data.success) {
							layer.msg('操作成功!', {
								icon : 1,
								offset : '180px'
							});
							$("#" + gridId).trigger("reloadGrid");
						} else {
							layer.msg('操作失败：<br>' + data.responseMessage, {
								icon : 2,
								offset : '180px'
							});
						}
						layer.closeAll('loading');
						layer.close(confirmId);
					}
				});
			}, function() {
			});
		}
	},
	loadItemFromGPGrid : function(entityId, queryURL, itemDetailUrl,gridId,formId) {

		if (entityId != undefined && entityId != "undefined") {
			layer.load(1, {
				shade : [ 0.2 ]
			// 透明度调整
			});
			$.ajax({
						url : queryURL,
						dataType : 'json',
						type : 'post',
						data : 'entityId=' + entityId,
						success : function(data) {

							if (data.success) {
								itemResponseData = data.responseData;
								GridOptions.openItemFromGPGrid(true, gridId,itemDetailUrl,formId);
							} else {

								parent.layer.msg('操作失败：<br>'
										+ data.responseMessage, {
									icon : 2,
									offset : '180px'
								});
							}
							layer.closeAll('loading');
						}
					});
		}
	},
	getItemResponseData : function() {
		return itemResponseData;
	},
	openItemFromGPGrid : function(isLoad, jpGridId, itemDetailUrl, formId) {

		var iframeWin;
		var isRefresh = false;
		// iframe窗
		layer.open({
			type : 2,
			title : ' ',
			closeBtn : 2, // 不显示关闭按钮
			shadeClose : false,
			shade : false,
			maxmin : true, // 开启最大化最小化按钮
			offset : '80px',
			area : [ '500px', '640px' ],
			shade : [ 0.3 ],
			content : itemDetailUrl + '?isLoad=' + isLoad + '&v='
					+ Math.random(),
			btn : [ '保存', '取消' ],
			yes : function(layero, index) {
				isRefresh = true;
				iframeWin.FormUtils.submit(formId);
			},
			btn2: function(index, layero){
			    //按钮【按钮二】的回调
				isRefresh = false;
			},
			cancel: function(){ 
			    //右上角关闭回调
				isRefresh = false;
			},
			success : function(layero, index) {
				iframeWin = window[layero.find('iframe')[0]['name']]; // 得到iframe页的窗口对象，执行iframe页的方法：iframeWin.method()
			},
			end : function(index) {
				layer.closeAll('loading');
				if(isRefresh)
					$("#" + jpGridId).trigger("reloadGrid");
			}
		});
	},
	reload : function(gridId){
		$('#' + gridId).trigger('reloadGrid');
	}
};

var FormUtils = {
		findProp : function(obj, prop){
		    prop = prop.split('.');
		    for(var i=0; i<prop.length; i++)
		    {
		    	obj = obj[prop[i]];
		    	if (!obj) break;
		    }
		    return obj;
		},
		fillFormByData : function(formId,data){
			if (!data) return;
			var form = document.getElementById(formId);
			if ($(form).is('form')){
				for ( var i = 0, e; e = form.elements[i]; i++) {
					if (e.name == null || $.trim(e.name) == '') {
					} else {
						var value = FormUtils.findProp (data, e.name);
						if (value != null) e.value = value;
					}
				}
			}
		},
		init: function(formId){
			var isLoad = CommonUtils.getUrlParam("isLoad");
			if(isLoad == true || isLoad == "true"){
				FormUtils.fillFormByData(formId, parent.window.GridOptions.getItemResponseData());
			}else{
				FormUtils.fillFormByData(formId, {id:''});
			}
		},
		submit : function(formId){
			$("#" + formId).submit();
		},
		submitHandler : function(formId,submitUrl){
			
			parent.layer.confirm('<small>您确定要执行此操作吗?</small>', {
				title : '<small>系统提示</small>',
				// skin: 'layui-layer-molv', //样式类名
				closeBtn : 0,
				icon:0,
				// shift: 1, //提示框载入动画
				btn : [ '确定', '取消' ]
			// 按钮
			}, function() {
				parent.layer.load(1, {
					shade : [ 0.2 ]
				// 透明度调整
				});
				
				$.ajax({
					url : submitUrl,
					dataType : 'json',
					type : 'post',
					data : $('#' + formId).serialize(),
					success : function(data) {
						if (data.success) {
							parent.layer.msg('操作成功!', {
								icon : 1,
								offset : '180px'
							});
							var index = parent.layer.getFrameIndex(window.name); // 先得到当前iframe层的索引
							parent.layer.close(index); // 再执行关闭
						} else {
							parent.layer.msg('操作失败：<br>' + data.responseMessage, {
								icon : 2,
								offset : '180px'
							});
							parent.layer.closeAll('loading');
						}
					}
				});
			}, function() {
				
			});
		},
		validatorInit : function(formId,submitUrl){
			$.validator.setDefaults({
				highlight : function(e) {
					$(e).closest(".form-group").removeClass("has-success").addClass(
							"has-error")
				},
				success : function(e) {
					e.closest(".form-group").removeClass("has-error").addClass(
							"has-success")
				},
				errorElement : "span",
				errorPlacement : function(e, r) {
					e.appendTo(r.is(":radio") || r.is(":checkbox") ? r.parent().parent()
							.parent() : r.parent())
				},
				errorClass : "help-block m-b-none",
				validClass : "help-block m-b-none",
				submitHandler : function() {
					FormUtils.submitHandler(formId,submitUrl);
				}
			})

			// 字符验证 
			$.validator.addMethod("stringCheck", function(value, element) { 
			   
				return this.optional(element) || /^[\u0391-\uFFE5\w]+$/.test(value); 
			}, "只能包括中文字、英文字母、数字和下划线");

			//电话号码
			$.validator.addMethod("isMobile", function(value, element) { 
			  var length = value.length; 
			  var mobile = /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/; 
			  return this.optional(element) || (length == 11 && mobile.test(value)); 
			}, "请正确填写您的手机号码"); 
		}
};